/**
 * Copyright (C) 2009, 2010 SC 4ViewSoft SRL
 *  
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *  
 *      http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package platzerworld.kegeln.gui.chart;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.chart.PointStyle;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import platzerworld.kegeln.common.ConstantsIF;
import platzerworld.kegeln.ergebnis.vo.ErgebnisVO;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Paint.Align;

/**
 * Average temperature demo chart.
 */
public class KegelverwaltungLineChart extends AbstractKegelverwaltungChart implements ConstantsIF {
  /**
   * Returns the chart name.
   * 
   * @return the chart name
   */
  public String getName() {
    return "Line - Chart";
  }

  /**
   * Returns the chart description.
   * 
   * @return the chart description
   */
  public String getDesc() {
    return "Line-Chart Durchschnittsergebnisse Kegeln";
  }

  /**
   * Executes the chart demo.
   * 
   * @param context the context
   * @return the built intent
   */
  public Intent execute(Context context, int chartIndikator) {
    String[] titles = new String[] { "Gesamt" };
    List<double[]> alleSpiele = new ArrayList<double[]>();
    List<double[]> alleErgebnisse = new ArrayList<double[]>();
    String chartTitel = "";

    double[] spiele = new double[data.size()];
    double[] ergebnisdata= new double[data.size()];

    for (int i = 0; i < data.size(); i++) {
    	spiele[i] =  i+1;
		ErgebnisVO ergebnis =	((ErgebnisVO)data.get(i));
		if(CHART_INDIKATOR_GESAMT == chartIndikator){
			ergebnisdata[i] =  ergebnis.gesamtergebnis;
		}else if(CHART_INDIKATOR_DG_1 == chartIndikator){
			ergebnisdata[i] =  ergebnis.volle251 + ergebnis.abraeumen251;
		}else if(CHART_INDIKATOR_DG_2 == chartIndikator){
			ergebnisdata[i] =  ergebnis.volle252 + ergebnis.abraeumen252;
		}
		
	}
    alleSpiele.add(spiele);
    alleErgebnisse.add(ergebnisdata);
   
    int[] colors = new int[] { Color.BLUE };
    
    PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE };
    
    XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
    int length = renderer.getSeriesRendererCount();
    for (int i = 0; i < length; i++) {
      ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
    }
    
    if(CHART_INDIKATOR_GESAMT == chartIndikator){
    	setChartSettings(renderer, "Durchschnitt", "Spieltag", "", 0, 20, 380, 480, Color.LTGRAY, Color.LTGRAY);
    	renderer.setPanLimits(new double[] { 1, 20, 310, 530 });
        renderer.setZoomLimits(new double[] { 0, 0, 310, 530 });
        chartTitel = "Kegeldurchschnitt Gesamt";
	}else if(CHART_INDIKATOR_DG_1 == chartIndikator){
		setChartSettings(renderer, "Durchschnitt", "Spieltag", "", 0, 20, 120, 170, Color.LTGRAY, Color.LTGRAY);
		renderer.setPanLimits(new double[] { 1, 20, 100, 180 });
	    renderer.setZoomLimits(new double[] { 0, 0, 100, 180 });
	    chartTitel = "Kegeldurchschnitt 1.DG";
	}else if(CHART_INDIKATOR_DG_2 == chartIndikator){
		setChartSettings(renderer, "Durchschnitt", "Spieltag", "", 0, 20, 50, 80, Color.LTGRAY, Color.LTGRAY);
		renderer.setPanLimits(new double[] { 1, 20, 35, 105 });
	    renderer.setZoomLimits(new double[] { 0, 0, 35, 105 });
	    chartTitel = "Kegeldurchschnitt 2.DG";
	}
    
    
    renderer.setXLabels(20);
    renderer.setYLabels(30);
    renderer.setShowGrid(true);
    renderer.setXLabelsAlign(Align.CENTER);
    renderer.setYLabelsAlign(Align.RIGHT);
    renderer.setDisplayChartValues(true);
    
    Intent intent = ChartFactory.getLineChartIntent(context, buildDataset(titles, alleSpiele, alleErgebnisse),
        renderer, chartTitel);
    return intent;
  }

	@Override
	public void putData(List<ErgebnisVO> data) {
		this.data = data;
	}

}
